package com.agenda.managedbeans;

import java.util.List;
import java.util.Map;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.persistence.EntityManager;
import javax.servlet.http.HttpServletRequest;

import com.agenda.model.entities.Usuario;
import com.agenda.model.repositories.UsuarioRepository;

@ManagedBean
public class UsuarioBean implements AgendaInterface{
	private Usuario usuario = new Usuario();
	private List<Usuario> usuarios;

	@Override
	public void adiciona(ActionEvent event) {
		// TODO Auto-generated method stub
		FacesContext context = FacesContext.getCurrentInstance();
		EntityManager manager = this.getManager();
		UsuarioRepository repository = new UsuarioRepository(manager);
		if (this.usuario.getId() == null) {
			repository.adiciona(usuario);
			context.addMessage(null, new FacesMessage(
					"Cadastro realizado com sucesso!", ""));
		} else {
			repository.atualiza(usuario);
			context.addMessage(null, new FacesMessage(
					"Cadastro atualizado com sucesso!", ""));
		}
		this.usuario = new Usuario();
		this.usuarios = null;
	}

	@Override
	public void preparaAlteracao(ActionEvent event) {
		// TODO Auto-generated method stub
		Map<String, String> params = FacesContext.getCurrentInstance()
				.getExternalContext().getRequestParameterMap();
		Long id = Long.parseLong(params.get("id"));
		EntityManager manager = this.getManager();
		UsuarioRepository repository = new UsuarioRepository(manager);
		this.usuario = repository.procura(id);
	}

	@Override
	public void remove(ActionEvent event) {
		// TODO Auto-generated method stub
		Map<String, String> params = FacesContext.getCurrentInstance()
				.getExternalContext().getRequestParameterMap();
		Long id = Long.parseLong(params.get("id"));
		EntityManager manager = this.getManager();
		UsuarioRepository repository = new UsuarioRepository(manager);
		repository.remove(id);
		this.usuarios = null;
	}

	public List<Usuario> getUsuarios() {
		if (this.usuarios == null) {
			EntityManager manager = this.getManager();
			UsuarioRepository repository = new UsuarioRepository(manager);
			repository.getList();
		}
		return this.usuarios;
	}

	private EntityManager getManager() {
		FacesContext fc = FacesContext.getCurrentInstance();
		ExternalContext ec = fc.getExternalContext();
		HttpServletRequest request = (HttpServletRequest) ec.getRequest();
		return (EntityManager) request.getAttribute("EntityManager");
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

}
